﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace CalculadoraDeMatrizes
{
    class M_Inversa2x2 : MatrizBase
    {
        
        Gerador gerador = Gerador.getInstance();
        double det;

        public override void Calcular(TextBox[,] matriz1, TextBox[,] matriz2)
        {
            base.Calcular(matriz1, matriz2);
            det = M_Determinante2x2.Determinante(matriz1);

            if (det != 0)
            {
                float[,] valor = inversa(matriz1);
                gerador.setMatriz3(0, 0, valor[0, 0].ToString());
                gerador.setMatriz3(1, 0, valor[1, 0].ToString());
                gerador.setMatriz3(0, 1, valor[0, 1].ToString());
                gerador.setMatriz3(1, 1, valor[1, 1].ToString());

                det = 0;
            }
            else {
                MessageBox.Show("Essa matriz não tem inverssa");
                det = 0;
            }

            TextBox[,] Resultado = Gerador.getInstance().getMatriz3();
        }
        /*
        float[,] inversa(TextBox[,] matriz1) 
        {
            float Aa = Convert.ToInt32(matriz1[0, 0].Text);
            float Ab = Convert.ToInt32(matriz1[1, 0].Text);
            float Ac = Convert.ToInt32(matriz1[0, 1].Text);
            float Ad = Convert.ToInt32(matriz1[1, 1].Text);

            float Ba = 0;
            float Bb = 0;
            float Bc = 0;
            float Bd = 0;

            if (Ad == 0)
            {
                Ba = 1 / ((-Ab * Ac) + Aa);
            }else{
                Ba = 1 / (((-Ab / Ad)* Ac) + Aa);
            }
            ////--------------Valor do 0,0-----\\\\\\
            if (Ac == 0)
            {
                Bb = 1 / ((-Aa * Ad) + Ab);
            }
            else
            {
                Bb = 1 / (((-Aa / Ac) * Ad) + Ab);
            }
            ////--------------Valor do 0,0-----\\\\\\
            if (Ab != 0)
            {
                Bc = 1 / ((-Ad * Aa) + Ac);
            }else {
                Bc = 1 / (((-Ad / Ab) * Aa) + Ac);
            }
            ////--------------Valor do 0,0-----\\\\\\
            if (Ad != 0)
            {
                Bd = 1 / ((-Ac * Ab) + Ad);
            }
            else
            {
                Bd = 1 / (((-Ac / Aa) * Ab) + Ad);
            }
            ////--------------Valor do 0,0-----\\\\\\

            float[,] matriz = new float[2, 2];
            matriz[0,0] = Ba;
            matriz[1,0] = Bb;
            matriz[0,1] = Bc;
            matriz[1,1] = Bd;

            
            return matriz;
        }
        */

        float[,] inversa(TextBox[,] matriz1)
        {
            float Aa = Convert.ToInt32(matriz1[0, 0].Text);
            float Ab = Convert.ToInt32(matriz1[1, 0].Text);
            float Ac = Convert.ToInt32(matriz1[0, 1].Text);
            float Ad = Convert.ToInt32(matriz1[1, 1].Text);

            float Ba = (Ad) / (float)det;
            float Bb = (Ab * -1) / (float)det;
            float Bc = (Ac*-1)/(float)det;
            float Bd = (Aa)/(float)det;

            float[,] matriz = new float[2, 2];
            matriz[0, 0] = Ba;
            matriz[1, 0] = Bb;
            matriz[0, 1] = Bc;
            matriz[1, 1] = Bd;


            return matriz;
        }

        public override bool podeCalcular(TextBox[,] matriz1, TextBox[,] matriz2)
        {
            return true;
        }
    }
}
